import { api, http } from "../../http/index";
import { put, call, takeLatest } from "redux-saga/effects";

// 任务名

export const FETCH_DETAIL_BY_ID = "detail/fetchDetailById";
export const SET_DETAIL_DATA = "detail/fetchDetail";
export const SET_DETAIL_LOADING = "detail/setDetailLoading";

const setLoading = (value) => ({
    type: SET_DETAIL_LOADING,
    value,
});

const setDetailData = (data) => ({ type: SET_DETAIL_DATA, data });

// 异步任务
const requestDatailData = async (id) => {
    // 发起请求
    // 根据id请求数据后传值给下一个函数
    const result = await http.get(api.GOODS_DETAIL_API, { id });
    console.log(result);
    return result;
};

// 完整任务

function* fetchDetail({ id }) {
    // 调用这个函数后需要处理一些事件
    // 这里是要向仓库中发起一个响应，设置state
    yield put(setLoading(true));
    // 这里的data是requestDatailData请求后返回的数据
    const data = yield call(requestDatailData, id);

    yield put(setDetailData(data));

    yield put(setLoading(false));
}

function* effect() {
    // 当前台发送FETCH_DETAIL_BY_ID事件的时候处理fetchDetail事件
    yield takeLatest(FETCH_DETAIL_BY_ID, fetchDetail);
}

// 暴露函数 以便于监听异步事件
export default [effect];
